package com.zenagro.domain.zenagro;

// No beginning comment snippet from this extension MP-MANAGED-ADDED-AREA-BEGINNING @import@// No ending comment snippet from this extension 
// No beginning comment snippet from this extension MP-MANAGED-ADDED-AREA-ENDING @import@// No ending comment snippet from this extension 
import java.sql.*;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

import org.openxava.annotations.*;

import com.zenagro.domain.zenagro.base.*;

//import com.zenagro.domain.zenagro.Finca;
//import com.zenagro.domain.zenagro.Almacen;

/**
 *
 *
 *
 * <p>Title: Agricultor</p>
 *
 * <p>Description: Domain Object describing a Agricultor entity</p>
 **/
 
@Entity (name="Agricultor")
@Table (name="agricultor")
/*
@Views(value={
		@View(name="reference", members="nombre,cif"),
		@View(members="nombre;cif;telefono,fax;observaciones;email;almacenId,fincas")
		})
		*/
@View(name="reference", members="nombre,cif")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Agricultor extends Identificable{

	

	@Required
    @Column(name="nombre",  nullable=false,  unique=false)//  length=45,
    private String nombre;

	@Required
    @Column(name="cif",nullable=false,  unique=true)//  length=15,  
    private String cif;

   

    @Column(name="telefono",    nullable=true,  unique=false)
    private Long telefono;

    @Column(name="fax",    nullable=true,  unique=false)
    private Long fax;

    @Stereotype("EMAIL")
    @Column(name="email", nullable=true,  unique=false)//  length=45, 
    private String email;

    @Column(name="observaciones",  nullable=true,  unique=false)//  length=1000,
    private String observaciones;

    //@DescriptionsList(descriptionProperties="a,b")
    @Required  @NoCreate @NoModify
    @ManyToOne //(fetch=FetchType.LAZY ,optional=false) Parece que el lazy da algun problema con JPaCloner!!!!
    @JoinColumn(name="almacen_id", referencedColumnName = "id", nullable=false,  unique=false  )
    @ReferenceView ("reference") 
    private Almacen almacenId;
 
    @Required @NoCreate @NoModify
    @ManyToOne //(fetch=FetchType.LAZY ,optional=false) Parece que el lazy da algun problema con JPaCloner!!!!
    @JoinColumn(name="provincia_id", referencedColumnName = "id", nullable=false,  unique=false  )
    @DescriptionsList(descriptionProperties="nombre")
    private Provincia provincia;
    
    
    @Required @NoCreate @NoModify
    @ManyToOne //(fetch=FetchType.LAZY ,optional=false) Parece que el lazy da algun problema con JPaCloner!!!!
    @JoinColumn(name="poblacion_id", referencedColumnName = "id", nullable=false,  unique=false  )
    //@ReferenceView ("reference")
    @DescriptionsList(descriptionProperties="nombre", condition="${provincia.id}=?", depends="provincia")
    private Poblacion poblacion;

   
   
  
	@OneToMany (targetEntity=com.zenagro.domain.zenagro.Finca.class, fetch=FetchType.LAZY, mappedBy="agricultor", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <Finca> fincas = new HashSet<Finca>(); 
   

    public Agricultor() {
    }


    public String getNombre() {
       
    	return nombre;
    }
	
    public void setNombre (String nombre) {
        this.nombre =  nombre;
    } 

    public String getCif() {
        return cif;
    }
	
    public void setCif (String cif) {
        this.cif =  cif;
    } 

   
    public Long getTelefono() {
        return telefono;
    }
	
    public void setTelefono (Long telefono) {
        this.telefono =  telefono;
    } 

    public Long getFax() {
        return fax;
    }
	
    public void setFax (Long fax) {
        this.fax =  fax;
    } 

    public String getEmail() {
        return email;
    }
	
    public void setEmail (String email) {
        this.email =  email;
    } 

    public String getObservaciones() {
        return observaciones;
    }
	
    public void setObservaciones (String observaciones) {
        this.observaciones =  observaciones;
    } 

    public Almacen getAlmacenId () {  //
    	return almacenId;
    }
	
    public void setAlmacenId (Almacen almacenId) {
    	this.almacenId = almacenId;//this.almacenId = almacen;
    }

    public Set<Finca> getFincas() {
        if (fincas == null){
            fincas = new HashSet<Finca>();
        }
        return fincas;
    }

    public void setFincas(Set<Finca> fincas) {
        this.fincas = fincas;
    }	
    
    public void addFincas(Finca finca) {
    	getFincas().add(finca);
    }


	public Poblacion getPoblacion() {
		return poblacion;
	}


	public void setPoblacion(Poblacion poblacionId) {
		this.poblacion = poblacionId;
	}

	
	public Provincia getProvincia() {
		return provincia;
	}

	
	public void setProvincia(Provincia provincia) {
		this.provincia = provincia;
	}

	

    

}
